//         1        ===> 1
//     2       4    ===> 4
// 3       5        ===> 5

const symmetricalTree = {
  val: 8,
  left: {
    val: 6,
    left: { val: 5, left: null, right: null },
    right: { val: 7, left: null, right: null }
  },
  right: {
    val: 6,
    left: { val: 7, left: null, right: null },
    right: { val: 5, left: null, right: null }
  }
}

function rightView(root) {
  if (!root) return [];
  const queue = [];
  const arrRS = [];
  // 先保存根结点，也就是第一层二叉树
  queue.push(root);
  while (queue.length > 0) {
    // 表示的是上一层的节点的数量
    let temp = null;
    // 遍历上一层节点，将它们的子节点加入队列中，收集得到二叉树的下一层
    for (let i = 0; i < queue.length; i++) {
      // 出队列，并获得返回的父节点
      const node = queue.shift();
      // 每次都用当前节点的val覆盖temp
      // temp最后会等于当前层最右的一个非空节点的val值
      if (node.val) temp = node.val;
      // 收集当前节点的左节点和右节点，从而得到下一层
      if (node.left) queue.push(node.left);
      if (node.right) queue.push(node.right);
    }
    // 收集每一层的最右节点  // 每次遍历完都是拿到的最右侧节点
    arrRS.push(temp);
  }
  return arrRS;
};

console.log(rightView())